mybatis group by 分组查询:将返回结果封装为map

您所在的位置:网站首页 mybatis 注解 list mybatis group by 分组查询:将返回结果封装为map

mybatis group by 分组查询:将返回结果封装为map

2024-07-03 23:37| 来源: 网络整理| 查看: 265

文章目录 1. 最简单但性能最差的做法2. 使用group by分组查询,将查询结果封装成类3.group by分组查询,将结果封装为map。直接封装为map?List

1. 最简单但性能最差的做法

在逻辑层分多次对数据库进行查询。伪代码如下。

List nameList ; List countList; for(String name: nameList){ countList.add(xxDao.countByName(name)); }

map文件如下。

select cout(*) from ** where name=#{name};

这样写起来很简单,但是反复建立与数据库的连接,效率极差。

2. 使用group by分组查询,将查询结果封装成类

为了提高性能,使用数据库中 group by 的语法,直接进行分组查询,并定义一个类接受查询结果。

//结果类 public class result{ private String key; private String value; //省略getter和setter }

map文件如下。

… select name as key , count(*) as value group by name;

然后再对List进行处理,这样效率比第一种方法高,但是建立result对象会有一定内存消耗,对类进行处理也并不方便。

3.group by分组查询,将结果封装为map。 直接封装为map? select department_id , count(*) from staff_career_info where status = 'enable' group by department_id;

想用上面这样的代码直接将查询结果封装到map中是不可以的。返回结果如下:在这里插入图片描述可见,这样得到的map中将column的名字作为了key,结果作为value。而且,如果有多个分组也只会返回一个分组。

List

正确的做法如下。

//Dao List getDepNumMap(); //map文件 select department_id as 'key', count(*) as 'value' from staff_career_info where status = 'enable' group by department_id;

然后再将得到的list 转化为map。这里的方法要自己写。

//转换方法 List list = sysStaffCareerInfoDao.getDepNumMap(); Map map = new HashMap(); if (list != null && !list.isEmpty()) { for (HashMap hashMap : list) { String key = null; Integer value = null; for (Map.Entry entry : hashMap.entrySet()) { if ("key".equals(entry.getKey())) { key = (String) entry.getValue(); } else if ("value".equals(entry.getKey())) { //我需要的是int型所以做了如下转换,实际上返回的object应为Long。 value = ((Long)entry.getValue()).intValue(); } } map.put(key, value); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3